/**********************************************************************
<<<<<<< HEAD
 * 函数名称： // pw_storage
 * 功能描述： // 用户注册
 * 访问的表： // password
 * 修改的表： // password
 * 输入参数： // char* p_user, const char *p_name, int netfd
 * 返回的值： // 正确返回0， 错误返回1
 * 更新说明： // 
 * 修改日期        版本号     修改人          修改内容
 * -----------------------------------------------
 * 2023/04/16       V3.0       zhao            XXXX
 ***********************************************************************/
#include <func.h>

#define STR_LEN 10

char *GenerateStr(char *str){
    int i,flag;
    srand(time(NULL));//通过时间函数设置随机数种子，使得每次运行结果随机。
    for(i = 0; i < STR_LEN; i ++){
        flag = rand()%3;
        switch(flag){
        case 0:
            str[i] = rand()%26 + 'a';
            break;
        case 1:
            str[i] = rand()%26 + 'A';
            break;
        case 2:
            str[i] = rand()%10 + '0';
            break;
        }
    }
    return str;
}

int pw_storage(const char * p_user, const char * p_passwd, int netfd){
    MYSQL * mysql = mysql_init(NULL); // 为mysql连接分配内存（线程不安全）

    MYSQL * ret = mysql_real_connect(mysql,"localhost", "root", "123456", "test", 0, NULL, 0);
    if(ret == NULL){
        fprintf(stderr,"mysql connect error:%s\n", mysql_error(mysql));
        train.length = -1;
        send(netfd, &train.length, sizeof(int), 0);
        sprintf(train.data, "mysql connect error:%s\n", mysql_error(mysql));
        send(netfd, train.data, strlen(train.data), 0);

        return -1;
    }
    char str[STR_LEN + 1] = {0};
    char sql[1024] = {0};
    char salt[STR_LEN + 1] = {0};
    strcpy(salt,  GenerateStr(str));
    sprintf(sql, "INSERT INTO password (user, salt, passwd, tomb) VALUES('%s', '%s', '%s' ,0);" 
            , p_user, salt, crypt(p_passwd, salt));

    int qret = mysql_query(mysql,sql);
    if(qret != 0){
        fprintf(stderr,"sql error:%s\n", mysql_error(mysql));
        train.length = -1;
        send(netfd, &train.length, sizeof(int), 0);
        sprintf(train.data, "mysql connect error:%s\n", mysql_error(mysql));
        send(netfd, train.data, strlen(train.data), 0);
        return -1;
    }else {
        train.length = 0;
        send(netfd, &train.length, sizeof(int), 0);
        sprintf(train.data, "passwd success\n");
        send(netfd, train.data, strlen(train.data), 0);
    }

    mysql_close(mysql);

    return 0;
} 
